import axios from '../utils/axios'
import apis from '../apis'
//自定义函数,将menus的数据转换成树形结构
const toTree = (data)=>{
    var rs = {};
    for(let i=0;i<data.length;i++){
        var permission = data[i];
    // 如果parentId是0,则表示它是树的第一级元素
        console.log(permission);
        if(permission.parentid==0){
            // rs.push(permission);
            permission.children = [];
            rs[permission._id] = permission;
        }        
    }
    for(let i=0;i<data.length;i++){
        var permission = data[i];
        for(var key in rs){
            if(permission.parentid == key){
                rs[key].children.push(permission)
            }
        }
    }
    return rs;
}
// 存储所有和system模块相关的所有状态
const state = {
    allMenus: [],
    allPermissions: [],//所有的权限,该选项只有在系统管理员角色下才会存在
}
/*
vuex的每一个模块都有和store对象一样的属性和方法
*/ 
const getters = {
    allMenus(state){
        return toTree(state.allMenus);
    },
    allPermissions(state){
        return toTree(state.allPermissions);
    }
}
// 所有同步修改的状态的行为都在mutations提供的函数里进行
const mutations = {
    LOADALLMENUS(state,payload){
        state.allMenus = payload;
    },
    LOADALLPERMISSIONS(state,payload){
        state.allPermissions = payload
    }
}

// 在这里进行异步数据请求,然后将请求到的数据提交到mutations里的函数进行状态的变更
const actions = {
    // 获取所有权限
    loadAllPermission({commit},payload){
        // 发起请求,加载所有的权限
        axios.get(apis.findAllPermission)
        .then((resp)=>{
            console.log(resp.data.allPermission);
            // 提交到mutations里更改
           commit('LOADALLPERMISSIONS',resp.data.allPermission)  
        })
    }
}


export default {
    getters,
    state,
    mutations,
    actions
}